home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 4_2005-2006.ISO / data / Zips / Windows_Re190765712005.psc / Registry Fixer / mdlMain.bas < prev   
BASIC Source File  |  2005-06-30  |  9KB  |  206 lines

  1. Attribute VB_Name = "mdlMain"
  2. Option Explicit
  3.  
  4. 'Start file searcher
  5. Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
  6. Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
  7. Public Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
  8. Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
  9.  
  10. Public Const MAX_PATH = 260
  11. Public Const MAXDWORD = &HFFFF
  12. Public Const INVALID_HANDLE_VALUE = -1
  13. Public Const FILE_ATTRIBUTE_ARCHIVE = &H20
  14. Public Const FILE_ATTRIBUTE_DIRECTORY = &H10
  15. Public Const FILE_ATTRIBUTE_HIDDEN = &H2
  16. Public Const FILE_ATTRIBUTE_NORMAL = &H80
  17. Public Const FILE_ATTRIBUTE_READONLY = &H1
  18. Public Const FILE_ATTRIBUTE_SYSTEM = &H4
  19. Public Const FILE_ATTRIBUTE_TEMPORARY = &H100
  20.  
  21. Type FILETIME
  22. dwLowDateTime As Long
  23. dwHighDateTime As Long
  24. End Type
  25.  
  26. Type WIN32_FIND_DATA
  27. dwFileAttributes As Long
  28. ftCreationTime As FILETIME
  29. ftLastAccessTime As FILETIME
  30. ftLastWriteTime As FILETIME
  31. nFileSizeHigh As Long
  32. nFileSizeLow As Long
  33. dwReserved0 As Long
  34. dwReserved1 As Long
  35. cFileName As String * MAX_PATH
  36. cAlternate As String * 14
  37. End Type
  38. 'End file searcher
  39.  
  40.  
  41. Public Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
  42. Public Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
  43. Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
  44. Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
  45.  
  46. Public Const HKEY_ALL = &H0&
  47. Public Const HKEY_CLASSES_ROOT = &H80000000
  48. Public Const HKEY_CURRENT_CONFIG = &H80000005
  49. Public Const HKEY_CURRENT_USER = &H80000001
  50. Public Const HKEY_DYN_DATA = &H80000006
  51. Public Const HKEY_LOCAL_MACHINE = &H80000002
  52. Public Const HKEY_PERFORMANCE_DATA = &H80000004
  53. Public Const HKEY_USERS = &H80000003
  54.  
  55. Public Const SYNCHRONIZE = &H100000
  56. Public Const STANDARD_RIGHTS_ALL = &H1F0000
  57. Public Const KEY_QUERY_VALUE = &H1
  58. Public Const KEY_SET_VALUE = &H2
  59. Public Const KEY_CREATE_LINK = &H20
  60. Public Const KEY_CREATE_SUB_KEY = &H4
  61. Public Const KEY_ENUMERATE_SUB_KEYS = &H8
  62. Public Const KEY_NOTIFY = &H10
  63. Public Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
  64.  
  65. 'Check if a path or file exists
  66. Public Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long
  67.  
  68. 'For ListView AutoSize
  69. Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  70.  
  71. Public Const LVM_FIRST = &H1000
  72.  
  73.  
  74. Public Function StripNulls(OriginalStr As String) As String
  75. If (InStr(OriginalStr, Chr(0)) > 0) Then
  76. OriginalStr = Left(OriginalStr, _
  77. InStr(OriginalStr, Chr(0)) - 1)
  78. End If
  79. StripNulls = OriginalStr
  80. End Function
  81.  
  82. 'Reverse a string
  83. Public Function ReverseString(TheString As String) As String
  84.     Dim i As Integer
  85.     For i = 1 To Len(TheString)
  86.         ReverseString = ReverseString & Mid(Right$(TheString, i), 1, 1)
  87.     Next
  88. End Function
  89.  
  90. 'Create a backup of the registry, I would have used the "regedit.exe /e" command but it takes too long.
  91. Public Function BackupReg()
  92.     Dim i As Integer
  93.     Dim TheKey As String
  94.     Dim TheValue As String
  95.     Dim DefaultValue As Boolean
  96.     Dim BackupFilename As String
  97.     If FileorFolderExists(App.Path & "\RegBackups") = False Then MkDir App.Path & "\RegBackups"
  98.     Do Until FileorFolderExists(App.Path & "\RegBackups\Backup #" & i & " (" & Replace(Replace(Now, "/", "-"), ":", ";") & ").reg") = False
  99.     i = i + 1
  100.     Loop
  101.     BackupFilename = App.Path & "\RegBackups\Backup #" & i & " (" & Replace(Replace(Now, "/", "-"), ":", ";") & ").reg"
  102.     MsgBox BackupFilename
  103.     Open BackupFilename For Output As #1
  104.     Print #1, "REGEDIT4" & vbCrLf
  105.     'Loops through all the checked items and saves the values into C:\Backup.reg
  106.     For i = 1 To frmMain.lvwRegErrors.ListItems.Count
  107.         If frmMain.lvwRegErrors.ListItems.Item(i).Checked = True Then
  108.             TheKey = ReverseString(frmMain.lvwRegErrors.ListItems.Item(i).SubItems(1) & "\" & frmMain.lvwRegErrors.ListItems.Item(i).SubItems(2))
  109.             'I'm not sure, but I think that is the value ends with a "\", then it's the default value for that key
  110.             If Right$(TheKey, 1) = "\" Then DefaultValue = True: TheKey = Mid(TheKey, 2)
  111.             TheValue = Chr(34) & Replace(ReverseString(Mid(TheKey, 1, InStr(1, TheKey, "\") - 1)), "\", "\\") & Chr(34)
  112.             TheKey = ReverseString(Mid(TheKey, InStr(1, TheKey, "\") + 1))
  113.             If DefaultValue = True Then TheValue = "@"
  114.             Print #1, "[" & TheKey & "]" & vbCrLf
  115.             Print #1, TheValue & "=" & Chr(34) & frmMain.lvwRegErrors.ListItems.Item(i).SubItems(3) & Chr(34) & vbCrLf
  116.         End If
  117.     Next
  118.     Close #1
  119. End Function
  120.  
  121. Public Sub LV_AutoSizeColumn(LV As ListView, Optional Column As ColumnHeader = Nothing)
  122.  Dim C As ColumnHeader
  123.  If Column Is Nothing Then
  124.   For Each C In LV.ColumnHeaders
  125.    SendMessage LV.hWnd, LVM_FIRST + 30, C.Index - 1, -1
  126.   Next
  127.  Else
  128.   SendMessage LV.hWnd, LVM_FIRST + 30, Column.Index - 1, -1
  129.  End If
  130.  LV.Refresh
  131. End Sub
  132.  
  133. Public Function FindFilesAPI(Path As String, SearchStr As String, FileCount As Integer, DirCount As Integer)
  134. Dim FileName As String
  135. Dim DirName As String
  136. Dim dirNames() As String
  137. Dim nDir As Integer
  138. Dim i As Integer
  139. Dim hSearch As Long
  140. Dim WFD As WIN32_FIND_DATA
  141. Dim Cont As Integer
  142. If Right(Path, 1) <> "\" Then Path = Path & "\"
  143. nDir = 0
  144. ReDim dirNames(nDir)
  145. Cont = True
  146. hSearch = FindFirstFile(Path & "*", WFD)
  147. If hSearch <> INVALID_HANDLE_VALUE Then
  148. Do While Cont
  149. DirName = StripNulls(WFD.cFileName)
  150. If (DirName <> ".") And (DirName <> "..") Then
  151. If GetFileAttributes(Path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then
  152. dirNames(nDir) = DirName
  153. DirCount = DirCount + 1
  154. nDir = nDir + 1
  155. ReDim Preserve dirNames(nDir)
  156. End If
  157. End If
  158. Cont = FindNextFile(hSearch, WFD)
  159. Loop
  160. Cont = FindClose(hSearch)
  161. End If
  162. hSearch = FindFirstFile(Path & SearchStr, WFD)
  163. Cont = True
  164. If hSearch <> INVALID_HANDLE_VALUE Then
  165. While Cont
  166. FileName = StripNulls(WFD.cFileName)
  167. If (FileName <> ".") And (FileName <> "..") Then
  168. FindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) + WFD.nFileSizeLow
  169. FileCount = FileCount + 1
  170. frmSearch.lstFiles.AddItem Path & FileName
  171. End If
  172. Cont = FindNextFile(hSearch, WFD)
  173. Wend
  174. Cont = FindClose(hSearch)
  175. End If
  176. If nDir > 0 Then
  177. For i = 0 To nDir - 1
  178. FindFilesAPI = FindFilesAPI + FindFilesAPI(Path & dirNames(i) & "\", SearchStr, FileCount, DirCount)
  179. Next i
  180. End If
  181. End Function
  182.  
  183. 'A DeleteValue function
  184. Public Sub DeleteValue(ROOTKEYS As ROOT_KEYS, Path As String, sKey As String)
  185.     Dim ValKey As String
  186.     Dim SecKey As String, SlashPos As Single
  187.     SlashPos = InStrRev(Path, "\", compare:=vbTextC    aR
  188.     NextA
  189. M(1T("RY Then
  190. dirNames(nDir) = DirName
  191. Dirint #1, "[")VD"[")V(srs.LTDirinM1OSCEs.LTDirinM1OSCEs.Lion
  192. PublicE  Th3nst INVALID_HANDLE_Anteger)
  193. LE_Anteger)
  194. LE_AntegeR LID_HANT(CLID_HANDLE_AntEnDise
  195. hSearch = Fen
  196. dirNames(ne" &  eD &  Mes(ne" &  eD &  Fen
  197. NA Names(ne" &  eD &  Mes(ne" &  eDUrb D)N&  eD &  Mes(nMp.PaEndPath, "\", cE ChipNulls(Ori Dim FileName As StreiD)N&  eD   eDIath & DirName_Ant eDIUVd Is Nothing Then
  198.   FChrUeverseString(Mid(TheKey, 1, InStr(1, TheKey, :M,6eRdnStr(1, TheKey, A1, a0f ChipNulls(Ori DimGostTheKeV*(1, The"int #1, "["= StripNullR o As Single
  199.     SlashPos = IntFiaKey, A1, a0N:cBve" & y, A1, a0N:cBv\w AutoSize
  200. PublicmtT,(nMp.Pe
  201. Dirint #1, "[")VD"[")V(srs.LTDirinM1OSCEs.TTDiing As String) As StrUwR StrIHIeVaENr Strinua-3uls StrUwR StrIHStrUwR  eD &  Mes(nMp.PaEnE,6eRdnStrUwR  eD & tLYWtLVnDise
  202. hSeaHStVxt_Rath, "\",StrwY eD & 
  203. hSeaHStVxt_RStVxt_RStVxt_dCSs.ListIRStVxt_RStVd Asi AukLtMtIRStVxt_RStVdileNv\w.stIRStVxt_RStVd "DAsi AukLtMofe.LiRd_ ROblic(1,p.PaL(TheKey, 1, InStr(1, Column Is NoRD &(roametVd "DA(iTaEIRStVxt_RS "D 3UE Then
  204. WhiD 3UE TheieN1  Se StrIHStrn3n,eM=e
  205. ieN1 DisedCSs.ListIe
  206. ieN1 DistL & ]]